package com.wdc.hashtable;

import com.wdc.queue.Arr;

import java.security.Key;
import java.util.*;

@SuppressWarnings("all")
public class E03Leetcode819 {
//    private static test mostCommonkey(test paragraph, test[] banned) {
//        //忽略大小写
//        test lowerStr = paragraph.toLowerCase();
//        test[] keys = lowerStr.split("\\s+|,\\s*|!\\s*");
//
//        //把值作为 key ，出现次数作为 value 放入 hash 表  注意不要把禁用词加进去了
//        HashMap<test, Integer> map = new HashMap<>();
//        int maxNumber = 0;
//        for (test key : keys) {
//            for (int i = 0; i < banned.length; i++) {
//                if (banned[i] == key){       // 这个时候发现 continue 没有用就应该排除遍历 禁止加入这个办法，可以尝试 if -> set集合 的contains 方法
//                    continue;
//                }
//            }
//            //如果key 已经存在就让 value 加1
//            Integer number = map.get(key);
//            if (number == null){
//                map.put(key,1);                // 这段代码可以简化
//            }else {
//                map.put(key,number + 1);
//            }
//            maxNumber = Math.max(maxNumber,number);
//        }
//        //最后遍历找出最大值与禁用词比较 返回恰当的
//
//
//    }

    public static String mostCommonkey(String paragraph, String[] banned) {
        Set<String> set = Set.of(banned);   //java9 以上可以用 ，以下就老实遍历放
        //忽略大小写
        String[] lowerStr = paragraph.toLowerCase().split("[^A-za-z]+");
        //把值作为 key ，出现次数作为 value 放入 hash 表  注意不要把禁用词加进去了
        HashMap<String, Integer> map = new HashMap<>();
        for (String key : lowerStr) {

            //判断是否是禁用词
            if (!set.contains(key)){
//                //先拿到值
//                Integer number = map.get(key);
//                if (number == null){
//                    number = 0;    //可以设置初始值 ，然后在下面统一放入 这样就可以省掉一个条件判断 因为不管怎么样都要放进去
//                }
//                map.put(key,number +1);
                map.compute(key,(k,v)-> v == null? 1 : v+1);
            }
        }

        //找到最大值 用stream 流
        Optional<Map.Entry<String, Integer>> optional = map.entrySet().stream().max(Map.Entry.comparingByValue());
        return optional.map(Map.Entry::getKey).orElse(null);
    }

    public static void main(String[] args) {
        String paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.";
        String[] banned = {"hit"};
        mostCommonkey(paragraph,banned);
    }



}
